import {Names} from "./storesName";
import {defineStore} from 'pinia'
import type {RouteRecordRaw} from "vue-router";

const modules = import.meta.glob('@/views/**/index.vue')
export const useRoutes = defineStore(Names.ROUTES, {
  state: () => {
    return {
      routes: [] as Array<RouteRecordRaw>
    }
  },
  getters: {},
  actions: {
    _addRoutes(data: Array<any>, router: any, parent = 'root') {
      data.forEach(item => {
        router.addRoute(parent, {
          path: `/${item.name}`,
          name: item.name,
          meta: item.meta,
          component: modules[`/src/${item.component}`],
        })
        item.children && this._addRoutes(item.children, router)
      })
    },
    _menuFormat(data: Array<any>): any[] {
      if (data && data.length) {
        data = data.sort((s) => s.seq)
        data = data.map((item) => {
          return {
            name: item.name,
            path: `/${item.name}`,
            blank: item.blank,
            children: this._menuFormat(item.children),
            component: item.component,
            meta: {
              menuId: item.id,
              tab: item.tab || 'diy',
              title: item.title,
              icon: item.icon,
              newWindow: item.newWindow,
              modulesVo: item.modulesVo,      // 所属模块
              isEvent: item.isEvent,          // 是否拥有事件
              eventType: item.eventType,      // 事件类型
              objTypeCode: item.objTypeCode,  // 对象类型编码
              dictVal: item.dictVal,          // 字典类型
              shareOrgType: item.shareOrgType,// 对象类型编码
              menuType: item.menuType,        // 菜单类型
              relationTypeCode: item.relationTypeCode, // 对象间关系类型
              relationalShipStr: item.relationalShipStr,  // 工作关系
            },
          }
        })
        return data
      }
      return []
    }
  },
  persist: {
    enabled: true,  // 开启数据持久化
    strategies: [
      {
        storage: localStorage, // 默认 sessionStorage
        // paths: ['token'],    // 接收一个数组（只存储数组中的元素），不写则存储全部
      }
    ]
  }
})